var firstMissingPositive = function(nums) {
  for (let i = 0; i < nums.length; ) {
    // 检查当前元素是否在其正确的位置上，以及是否需要交换
    if (nums[i] > 0 && nums[i] <= nums.length && nums[i] !== i + 1 && nums[i] !== nums[nums[i] - 1]) {
      // 交换 nums[i] 和 nums[nums[i]-1]
      // [nums[i], nums[nums[i] - 1]] = [nums[nums[i] - 1], nums[i]];
      exchange(nums, i, nums[i] - 1)
    } else {
      // 如果不需要交换，则检查下一个位置
      i++;
    }
  }

  // 查找第一个缺失的正数
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] !== i + 1) {
      return i + 1; // 找到第一个缺失的正数
    }
  }
  
  return nums.length + 1; // 如果没有缺失正数，返回下一个数字
};

const nums = [3, 4, -1, 1];
console.log(firstMissingPositive(nums)); // 输出: 2

function exchange(nums,i,j){
  let temp = nums[i];
  nums[i] = nums[j];
  nums[j] = temp;
}